library(tidyverse)
Loading tidyverse: tibble
Loading tidyverse: tidyr
Loading tidyverse: readr
Loading tidyverse: purrr
Loading tidyverse: dplyr
Conflicts with tidy packages ------------------------------------------------
expand(): tidyr, Matrix
filter(): dplyr, stats
lag(): dplyr, stats
rdunif(): purrr, extraDistr
Why all dots are not blue?



ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy, shape = year))
エラー: A continuous variable can not be mapped to shape


?geom_point
# ggplot(data = mpg) +
# geom_point(mapping = aes(x = displ, y = hwy, stroke = class))





continuous value

















ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point() +
geom_smooth(se = F)
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point() +
geom_smooth(mapping = aes(group = drv), se = F)
ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = drv)) +
geom_point() +
geom_smooth(se = F)

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = drv)) +
geom_smooth(se = F)

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = drv)) +
geom_smooth(mapping = aes(linetype = drv), se = F)

ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(size = 6, color = "white") +
geom_point(mapping = aes(color = drv))

1.7

?geom_bar




?stat_summary
# ggplot(data = diamonds) +
# geom_pointrange(
# mapping = aes(x = cut, y = median(depth), ymin = min(depth),
# ymax = max(depth)), group = cut)
?geom_col



1.8





ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity),
position = "identity")
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity),
position = "fill")
ggplot(data = diamonds) +
geom_bar(mapping = aes(x = cut, fill = clarity),
position = "dodge")



ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy),
position = "jitter")
ggplot(data = mpg) +
geom_jitter(mapping = aes(x = displ, y = hwy))

?geom_jitter


ggplot(data = mpg) +
geom_point(mapping = aes(x = cty, y = hwy))
ggplot(data = mpg) +
geom_jitter(mapping = aes(x = cty, y = hwy))
ggplot(data = mpg) +
geom_jitter(mapping = aes(x = cty, y = hwy), width = 1, height = 1)

ggplot(data = mpg) +
geom_jitter(mapping = aes(x = cty, y = hwy), width = 3, height = 3)

1.10
LS0tCnRpdGxlOiAiUiBmb3IgRGF0YSBTY2llbmNlIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmBgYAoKIyMjIyAxLjIuMwpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpCmBgYAoKYGBge3J9Cm10Y2FycwpgYGAKCmBgYHtyfQo/bXBnCmBgYAoKYGBge3J9CmdncGxvdChtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBod3ksIHkgPSBjeWwpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QobXBnKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gY2xhc3MsIHkgPSBkcnYpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKwogICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBjb2xvciA9IGNsYXNzKSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgc2l6ZSA9IGNsYXNzKSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgYWxwaGEgPSBjbGFzcykpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIHNoYXBlID0gY2xhc3MpKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKwogICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSwgY29sb3IgPSAiYmx1ZSIpCmBgYAoKIyMjIyBXaHkgYWxsIGRvdHMgYXJlIG5vdCBibHVlPwpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSAiYmx1ZSIpKQpgYGAKCmBgYHtyfQptcGcKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSB5ZWFyKSkKYGBgCgoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIHNpemUgPSB5ZWFyKSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgc2hhcGUgPSB5ZWFyKSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSB5ZWFyLCBzaXplID0geWVhcikpCmBgYAoKCmBgYHtyfQo/Z2VvbV9wb2ludApgYGAKYGBge3J9CiMgZ2dwbG90KGRhdGEgPSBtcGcpICsKIyAgICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBzdHJva2UgPSBjbGFzcykpCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIGNvbG9yID0geWVhcikpCmBgYAoKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKwogICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKwogICBmYWNldF93cmFwKH4gY2xhc3MsIG5yb3cgPSAyKQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKwogICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKwogICBmYWNldF9ncmlkKGRydiB+IGN5bCkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsKICAgZmFjZXRfZ3JpZCguIH4gY3lsKQpgYGAKYGBge3J9CmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKSArCiAgIGZhY2V0X2dyaWQoZHJ2IH4gLikKYGBgCgoKIyMjIyBjb250aW51b3VzIHZhbHVlCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKwogICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKwogICBmYWNldF93cmFwKH4gY3R5KQpgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKwogICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGRydiwgeSA9IGN5bCkpCmBgYAoKCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsKICAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKQpgYGAKCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIGxpbmV0eXBlID0gZHJ2KSkKYGBgCgoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3ksIGNvbG9yID0gZHJ2KSkgKwogICBnZW9tX3Ntb290aChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSBkcnYsIGxpbmV0eXBlID0gZHJ2KSkKYGBgCgoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21fc21vb3RoKG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBncm91cCA9IGRydikpCmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21fc21vb3RoKG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBjb2xvciA9IGRydiksCiAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsKICAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKQpnZ3Bsb3QoZGF0YSA9IG1wZywgbWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKSArCiAgIGdlb21fcG9pbnQoKSArCiAgIGdlb21fc21vb3RoKCkKCmBgYAoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnLCBtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKGNvbG9yID0gY2xhc3MpKSArCiAgIGdlb21fc21vb3RoKCkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKwogICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoY29sb3IgPSBjbGFzcykpICsKICAgZ2VvbV9zbW9vdGgoCiAgICAgIGRhdGEgPSBmaWx0ZXIobXBnLCBjbGFzcyA9PSAic3ViY29tcGFjdCIpLAogICAgICBzZSA9IEYKICAgKQpgYGAKCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoZ3JvdXAgPSBjbGFzcykpICsKICAgZ2VvbV9ib3hwbG90KG1hcHBpbmcgPSBhZXMoeCA9IGNsYXNzLCB5ID0gaHd5KSkKYGBgCgoKYGBge3J9CmdncGxvdChkYXRhID0gbXBnLCBtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSwgY29sb3IgPSBkcnYpKSArCiAgIGdlb21fcG9pbnQoKSArCiAgIGdlb21fc21vb3RoKHNlID0gRikKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKwogICBnZW9tX3BvaW50KCkgKwogICBnZW9tX3Ntb290aCgpCmdncGxvdCgpICsKICAgZ2VvbV9wb2ludCgKICAgICAgZGF0YSA9IG1wZywgCiAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKwogICBnZW9tX3Ntb290aCgKICAgICAgZGF0YSA9IG1wZywgCiAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKwogICBnZW9tX3BvaW50KCkgKwogICBnZW9tX3Ntb290aChzZSA9IEYpCmdncGxvdChkYXRhID0gbXBnLCBtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpICsKICAgZ2VvbV9wb2ludCgpICsKICAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyhncm91cCA9IGRydiksIHNlID0gRikKZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5LCBjb2xvciA9IGRydikpICsKICAgZ2VvbV9wb2ludCgpICsKICAgZ2VvbV9zbW9vdGgoc2UgPSBGKQpnZ3Bsb3QoZGF0YSA9IG1wZywgbWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyhjb2xvciA9IGRydikpICsKICAgZ2VvbV9zbW9vdGgoc2UgPSBGKQpnZ3Bsb3QoZGF0YSA9IG1wZywgbWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyhjb2xvciA9IGRydikpICsKICAgZ2VvbV9zbW9vdGgobWFwcGluZyA9IGFlcyhsaW5ldHlwZSA9IGRydiksIHNlID0gRikKZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkgKwogICBnZW9tX3BvaW50KHNpemUgPSA2LCBjb2xvciA9ICJ3aGl0ZSIpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKGNvbG9yID0gZHJ2KSkKYGBgCgojIyMgMS43CmBgYHtyfQpkaWFtb25kcyAgIApgYGAKCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjdXQpKQpgYGAKCmBgYHtyfQo/Z2VvbV9iYXIKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjdXQpKQpnZ3Bsb3QoZGF0YSA9IGRpYW1vbmRzKSArCiAgIHN0YXRfY291bnQobWFwcGluZyA9IGFlcyh4ID0gY3V0KSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjdXQsIHkgPSAuLnByb3AuLiwgZ3JvdXAgPSAxKSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBzdGF0X3N1bW1hcnkoCiAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgeSA9IGRlcHRoKSwKICAgICAgZnVuLnltaW4gPSBtaW4sCiAgICAgIGZ1bi55bWF4ID0gbWF4LAogICAgICBmdW4ueSA9IG1lZGlhbgogICApCmBgYAoKYGBge3J9Cj9zdGF0X3N1bW1hcnkKYGBgCgpgYGB7cn0KIyBnZ3Bsb3QoZGF0YSA9IGRpYW1vbmRzKSArCiMgICAgZ2VvbV9wb2ludHJhbmdlKAojICAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgeSA9IG1lZGlhbihkZXB0aCksIHltaW4gPSBtaW4oZGVwdGgpLCAKIyAgICAgICAgICAgICAgICAgICAgIHltYXggPSBtYXgoZGVwdGgpKSwgZ3JvdXAgPSBjdXQpCmBgYAoKYGBge3J9Cj9nZW9tX2NvbApgYGAKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IGRpYW1vbmRzKSArCiAgIGdlb21fY29sKG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgeSA9IHByaWNlKSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjdXQsIHkgPSAuLnByb3AuLikpCmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsKICAgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCBmaWxsID0gY29sb3IsIHkgPSAuLnByb3AuLiksIAogICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEYpCmBgYAoKCiMjIyAxLjgKYGBge3J9CmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsKICAgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCBjb2xvciA9IGN1dCkpCmdncGxvdChkYXRhID0gZGlhbW9uZHMpICsKICAgZ2VvbV9iYXIobWFwcGluZyA9IGFlcyh4ID0gY3V0LCBmaWxsID0gY3V0KSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjdXQsIGZpbGwgPSBjbGFyaXR5KSkKYGBgCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjdXQsIGZpbGwgPSBjbGFyaXR5KSwKICAgICAgICAgICAgcG9zaXRpb24gPSAiaWRlbnRpdHkiKQpnZ3Bsb3QoZGF0YSA9IGRpYW1vbmRzKSArCiAgIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgZmlsbCA9IGNsYXJpdHkpLAogICAgICAgICAgICBwb3NpdGlvbiA9ICJmaWxsIikKZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBnZW9tX2JhcihtYXBwaW5nID0gYWVzKHggPSBjdXQsIGZpbGwgPSBjbGFyaXR5KSwKICAgICAgICAgICAgcG9zaXRpb24gPSAiZG9kZ2UiKQpgYGAKCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSBkaXNwbCwgeSA9IGh3eSkpCmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gZGlzcGwsIHkgPSBod3kpLAogICAgICAgICAgICAgIHBvc2l0aW9uID0gImppdHRlciIpCmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21faml0dGVyKG1hcHBpbmcgPSBhZXMoeCA9IGRpc3BsLCB5ID0gaHd5KSkKYGBgCgpgYGB7cn0KP2dlb21faml0dGVyCmBgYAoKCmBgYHtyfQpnZ3Bsb3QoZGF0YSA9IG1wZykgKwogICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IGN0eSwgeSA9IGh3eSkpCmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21faml0dGVyKG1hcHBpbmcgPSBhZXMoeCA9IGN0eSwgeSA9IGh3eSkpCmdncGxvdChkYXRhID0gbXBnKSArCiAgIGdlb21faml0dGVyKG1hcHBpbmcgPSBhZXMoeCA9IGN0eSwgeSA9IGh3eSksIHdpZHRoID0gMSwgaGVpZ2h0ID0gMSkKZ2dwbG90KGRhdGEgPSBtcGcpICsKICAgZ2VvbV9qaXR0ZXIobWFwcGluZyA9IGFlcyh4ID0gY3R5LCB5ID0gaHd5KSwgd2lkdGggPSAzLCBoZWlnaHQgPSAzKQpgYGAKCgoKCiMjIyAxLjkKYGBge3J9CmdncGxvdChkYXRhID0gbXBnLCBtYXBwaW5nID0gYWVzKHggPSBjbGFzcywgeSA9IGh3eSkpICsKICAgZ2VvbV9ib3hwbG90KCkKZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGNsYXNzLCB5ID0gaHd5KSkgKwogICBnZW9tX2JveHBsb3QoKSArCiAgIGNvb3JkX2ZsaXAoKQpgYGAKCmBgYHtyfQpiYXIgPC0gZ2dwbG90KGRhdGEgPSBkaWFtb25kcykgKwogICBnZW9tX2JhcigKICAgICAgbWFwcGluZyA9IGFlcyh4ID0gY3V0LCBmaWxsID0gY3V0KSwKICAgICAgc2hvdy5sZWdlbmQgPSBGQUxTRSwKICAgICAgd2lkdGggPSAxCiAgICkgKwogICB0aGVtZShhc3BlY3QucmF0aW8gPSAxKSArCiAgIGxhYnMoeCA9IE5VTEwsIHkgPSBOVUxMKQpiYXIgKyBjb29yZF9mbGlwKCkKYmFyICsgY29vcmRfcG9sYXIoKQpgYGAKCgpgYGB7cn0KYmFyIDwtIGdncGxvdChkYXRhID0gZGlhbW9uZHMpICsKICAgZ2VvbV9iYXIoCiAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgZmlsbCA9IGNsYXJpdHkpLAogICAgICBwb3NpdGlvbiA9ICJpZGVudGl0eSIKICAgKQpiYXIKYmFyICsgY29vcmRfcG9sYXIoKQpgYGAKCgpgYGB7cn0KP2xhYnMKYmFyIDwtIGdncGxvdChkYXRhID0gZGlhbW9uZHMpICsKICAgZ2VvbV9iYXIoCiAgICAgIG1hcHBpbmcgPSBhZXMoeCA9IGN1dCwgZmlsbCA9IGNsYXJpdHkpLAogICAgICBwb3NpdGlvbiA9ICJpZGVudGl0eSIKICAgKSArCiAgIGxhYnMoeCA9ICJDVVQiLCB5ID0gIkNPVU5UIikKYmFyICsgY29vcmRfcG9sYXIoKQpgYGAKCgpgYGB7cn0KZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGN0eSwgeSA9IGh3eSkpICsKICAgZ2VvbV9wb2ludCgpICsKICAgZ2VvbV9hYmxpbmUoKSArCiAgIGNvb3JkX2ZpeGVkKCkKZ2dwbG90KGRhdGEgPSBtcGcsIG1hcHBpbmcgPSBhZXMoeCA9IGN0eSwgeSA9IGh3eSkpICsKICAgZ2VvbV9wb2ludCgpICsKICAgZ2VvbV9hYmxpbmUoKQpgYGAKCgoKIyMjIDEuMTAKCgojIyAyCiMjIyAyLjEKIyMjIDIuMgojIyMgMi4zCgrlpKfjgZfjgZ/nt7Tnv5LllY/poYzjgarjgZcKCiMjIDMKIyMjIDMuMQpgYGB7cn0KbGlicmFyeShueWNmbGlnaHRzMTMpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCmBgYHtyfQpmbGlnaHRzCmBgYAoKCiMjIyAzLjIKYGBge3J9CmZpbHRlcihmbGlnaHRzLCBhcnJfZGVsYXkgPiAxMjApCmBgYAoKYGBge3J9CmZpbHRlcihmbGlnaHRzLCBkZXN0ICVpbiUgYygiSUFIIiwgIkhPVSIpKQpgYGAKCmBgYHtyfQpmaWx0ZXIoZmxpZ2h0cywgY2FycmllciAlaW4lIGMoIlVBIiwgIkFBIiwgIkRMIikpCmBgYAoKYGBge3J9CmZpbHRlcihmbGlnaHRzLCBtb250aCAlaW4lIGMoNzo5KSkKYGBgCgpgYGB7cn0KZmlsdGVyKGZsaWdodHMsIGFycl9kZWxheSA+IDEyMCAmIGRlcF9kZWxheSA8PSAwKQpgYGAKCmBgYHtyfQpmaWx0ZXIoZmxpZ2h0cywgZGVwX2RlbGF5ID49IDYwICYgZGVwX2RlbGF5IC0gYXJyX2RlbGF5ID49IDMwICkKYGBgCgpgYGB7cn0KZmlsdGVyKGZsaWdodHMsIGRlcF90aW1lIDwgNjAwKQpgYGAKCgpgYGB7cn0KZmlsdGVyKGZsaWdodHMsIGlzLm5hKGRlcF90aW1lKSkKYGBgCgoKYGBge3J9Ck5BIF4gMApOQSB8IFRSVUUKRkFMU0UgJiBOQQpOQSAqIDAKYGBgCgoKIyMjIDMuMwpgYGB7cn0KYXJyYW5nZShmbGlnaHRzLCBkZXNjKGlzLm5hKGRlcF9kZWxheSkpKQpgYGAKCmBgYHtyfQphcnJhbmdlKGZsaWdodHMsIGRlc2MoZGVwX2RlbGF5KSkKYGBgCgpgYGB7cn0KYXJyYW5nZShmbGlnaHRzLCBkZXNjKGRpc3RhbmNlIC8gYWlyX3RpbWUpKQpgYGAKCgpgYGB7cn0KYXJyYW5nZShmbGlnaHRzLCBkaXN0YW5jZSkKYGBgCgoKCiMjIyAzLjQKCgoKCgoKCgoKCg==